home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Ham Radio 2000 #2
/
Ham Radio 2000 - Volume 2.iso
/
HAMV2
/
TCP_IP
/
TNOS230S
/
PPPDUMP.C
< prev
next >
Wrap
C/C++ Source or Header
|
1996-08-29
|
3KB
|
103 lines
/*
* PPPDUMP.C
*
* 12-89 -- Katie Stevens (dkstevens@ucdavis.edu)
* UC Davis, Computing Services
* PPP.08 05-90 [ks] improve tracing reports
* PPP.09 05-90 [ks] add UPAP packet reporting
* PPP.14 08-90 [ks] change UPAP to PAP for consistency with RFC1172
* PPP.15 09-90 [ks] update to KA9Q NOS v900828
* Jan 91 [Bill Simpson] small changes to match rewrite of PPP
* Aug 91 [Bill Simpson] fixed some buffer loss
*/
#include "global.h"
#ifdef PPP
#include "mbuf.h"
#include "iface.h"
#include "ppp.h"
#include "trace.h"
#if !defined(_lint)
static char rcsid[] OPTIONAL = "$Id: pppdump.c,v 1.10 1996/08/29 12:11:16 root Exp root $";
#endif
/* dump a PPP packet */
void
ppp_dump (fp, bpp, unused)
FILE *fp;
struct mbuf **bpp;
int unused OPTIONAL;
{
struct ppp_hdr hdr;
struct mbuf *tbp;
traceprintf (fp, "PPP: len %3u\t", len_p (*bpp));
/* HDLC address and control fields may be compressed out */
if ((byte_t) (*bpp)->data[0] != HDLC_ALL_ADDR) {
traceprintf (fp, "(compressed ALL/UI)\t");
} else if ((byte_t) (*bpp)->data[1] != HDLC_UI) {
traceprintf (fp, "(missing UI!)\t");
} else {
/* skip address/control fields */
(void) pull16 (bpp);
}
/* Initialize the expected header */
hdr.addr = HDLC_ALL_ADDR;
hdr.control = HDLC_UI;
hdr.protocol = (int16) PULLCHAR (bpp);
/* First byte of PPP protocol field may be compressed out */
if (hdr.protocol & 0x01)
traceprintf (fp, "compressed ");
else {
hdr.protocol = (int16) ((hdr.protocol << 8) | PULLCHAR (bpp));
/* Second byte of PPP protocol field must be odd */
if (!(hdr.protocol & 0x01))
traceprintf (fp, "(not odd!) ");
}
traceprintf (fp, "protocol: ");
switch (hdr.protocol) {
case PPP_IP_PROTOCOL:
traceprintf (fp, "IP\n");
ip_dump (fp, bpp, 1);
break;
case PPP_IPCP_PROTOCOL:
traceprintf (fp, "IPCP\n");
break;
case PPP_LCP_PROTOCOL:
traceprintf (fp, "LCP\n");
break;
case PPP_PAP_PROTOCOL:
traceprintf (fp, "PAP\n");
break;
case PPP_COMPR_PROTOCOL:
traceprintf (fp, "VJ Compressed TCP/IP\n");
vjcomp_dump (fp, bpp, 0);
break;
case PPP_UNCOMP_PROTOCOL:
traceprintf (fp, "VJ Uncompressed TCP/IP\n");
/* Get our own copy so we can mess with the data */
if (bpp && (tbp = copy_p (*bpp, len_p (*bpp))) == NULLBUF)
return;
traceprintf (fp, "\tconnection 0x%02x\n",
tbp->data[9]); /* FIX THIS! */
/* Restore the bytes used with Uncompressed TCP */
tbp->data[9] = TCP_PTCL; /* FIX THIS! */
ip_dump (fp, &tbp, 1);
free_p (tbp);
break;
default:
traceprintf (fp, "unknown 0x%04x\n", hdr.protocol);
break;
}
}
#endif /* PPP */